Time zones are a user interface problem
The maths is easy and has been solved for decades. What goes wrong is the sentence you write in the email.
Nobody gets the arithmetic wrong. Every language has a library, every library knows the rules, and the rules — including the strange ones — are written down in a database that has been maintained since 1986.
What goes wrong is the handoff to a person. Somebody writes 3pm in an email, means their own three, and sends it to a city seven hours away. The library was never consulted, because there was no software involved at that moment. Just a sentence.
Never write a time without its zone
The smallest fix is a rule: a time in prose always carries its zone, always. 3:00 pm CET is four more characters and removes an entire class of failure.
The better fix is not to write it at all
A booking page renders every time in the zone of the browser looking at it, which is almost always the right one, and shows the zone it picked so the visitor can correct it. Nobody converts anything. Nobody writes a time in a sentence. The failure mode disappears because the handoff to prose never happens.
The one that still catches us
Daylight saving does not move on the same weekend everywhere. For two weeks each spring and autumn, the offset between London and New York is not the one anybody has memorised. A recurring meeting booked in March will drift in a way that looks like a bug and is not. Store the zone, not the offset, and recompute every occurrence.